package gob.pe.mtc.licencias.DAO;

import gob.pe.mtc.licencias.beans.Clientelicencia;
import gob.pe.mtc.licencias.utiles.Utiles;

import java.util.List;

import org.apache.log4j.Logger;
import org.hibernate.Criteria;
import org.hibernate.Query;
import org.hibernate.SessionFactory;
import org.hibernate.criterion.Restrictions;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

public class ClienteLicenciaDAOImpl extends HibernateDaoSupport implements ClienteLicenciaDAO {
		
	private static final Logger logger = Logger.getLogger(ClienteLicenciaDAOImpl.class);
	
	public ClienteLicenciaDAOImpl(){}
	
	public ClienteLicenciaDAOImpl(SessionFactory sessionFactory){
		setSessionFactory(sessionFactory);		
	}
	
	@SuppressWarnings("unchecked")
	@Override
	public List<Clientelicencia> listaLicenciasCliente() {
		logger.debug("listando clientes licencias");
		return getHibernateTemplate().find("from Clientelicencia where estado=1");
	}

	@SuppressWarnings("unchecked")
	@Override
	public List<Clientelicencia> listaLicenciasCliente( Clientelicencia cliente ) {
		Criteria crit = getSession().createCriteria(Clientelicencia.class);
		crit.add(Restrictions.eq("estado","1"));
		if(cliente.getCliente()!=null){
			Criteria crit2 = crit.createCriteria("cliente");
			if(!Utiles.nullToBlank(cliente.getCliente().getNombres()).equals("")){
				crit2.add(Restrictions.like("nombres",cliente.getCliente().getNombres()));
			}
			if(!Utiles.nullToBlank(cliente.getCliente().getApellidoPat()).equals("")){
				crit2.add(Restrictions.like("apellidoPat",cliente.getCliente().getApellidoPat()));
			}
			if(!Utiles.nullToBlank(cliente.getCliente().getApellidoMat()).equals("")){
				crit2.add(Restrictions.like("apellidoMat",cliente.getCliente().getApellidoMat()));
			}
		}
		if(!Utiles.nullToBlank(cliente.getFechaOtorgamiento()).equals("")){
			crit.add(Restrictions.eq("fechaOtorgamiento",cliente.getFechaOtorgamiento()));
		}
		if(cliente.getLicencia()!=null){
			Criteria crit2 = crit.createCriteria("licencia");
			if(!Utiles.nullToBlank(cliente.getLicencia().getNumero()).equals("")){
				crit2.add(Restrictions.eq("numero",cliente.getLicencia().getNumero()));
			}
			if(!Utiles.nullToBlank(cliente.getLicencia().getTipoLicencia().getIdTipoLic()).equals("")){
				crit2.createCriteria("tipoLicencia")
				.add(Restrictions.like("idTipoLic",cliente.getLicencia().getTipoLicencia().getIdTipoLic()));
				logger.debug("buscando tipo de licencia " + cliente.getLicencia().getTipoLicencia().getIdTipoLic());
			}
		}
		List<Clientelicencia> lista = crit.list();
		logger.debug("list " + lista.size());
		return lista;
		
	}

	@Override
	public void registraclientelicencia(Clientelicencia clilic) {
		getHibernateTemplate().persist(clilic);
	}

	@Override
	public void eliminarLicencias(int cliente, int licencia) {
		
		Query query = getSession().createQuery("update from Clientelicencia set estado = '0' where  id.codLicencia = :clic ")
		.setLong("clic", new Long(licencia));
		query.executeUpdate();
		
	}

}
